package com.gxks.lhs.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gxks.lhs.entity.Order;

import java.time.Instant;
import java.time.LocalDateTime;


/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author LuoHaisong
 * @since 2023-05-19
 */
public interface IOrderService extends IService<Order> {
    /**
     * 根据id取消订单
     *
     * @param id 要取消订单的订单id
     * @return 是否取消成功
     */
    boolean cancellationOfOrderById(String id);

    /**
     * 根据id取消订单
     *
     * @param id 要取消订单的订单id
     * @return 是否取消成功
     */
    boolean cancellationOfOrderByIdAndUserId(String userId, String id);

    /**
     * 根据id对订单进行退款
     *
     * @param id
     * @return
     */
    boolean refundOrderById(Integer id);


    /**
     * 根据条件查询订单
     *
     * @param id
     * @param beginTime
     * @param endTime
     * @param current
     * @param size
     * @return
     */
    Page<Order> findOrders(String id, Integer status, Instant beginTime, Instant endTime, Integer current, Integer size);

    /**
     * 查询所有的订单
     *
     * @return 所有的订单的列表
     */
    Page<Order> findAllOrders(Integer current, Integer size);

    /**
     * 根据id查询订单详细信息
     *
     * @param id
     * @return
     */
    Order findOrderByIdOfUser(String id, String userId);

    /**
     * 根据id查询订单详细信息
     *
     * @param id
     * @return
     */
    Order findOrderByIdOfAdmin(String id);

    /**
     * 生成订单,并返回订单id
     *
     * @param order
     * @return
     */
    String createOrder(Order order);

    /**
     * 根据买家id查询订单
     */
    Page<Order> findOrdersByBuyerId(Integer buyerId, Integer current, Integer size);

    /**
     * 查询用户订单列表
     *
     * @param order
     * @param current
     * @return
     */
    Page<Order> findUserOrderList(Order order, Integer current);

    boolean updateOrder(Order order);

    Boolean balancePayOrder(String userId, String orderId);

    boolean testPayOrder(String userId, String orderId);

    /**
     * 订单确认收货
     *
     * @param userId
     * @param orderId
     * @return
     */
    boolean receipt(String userId, String orderId);
}
